Модификация данных¶
Для выполнения операций модификации данных в Tarantool Column Store используются
запросы SQL DML. Их можно отсылать как через SQL-драйвер, так и
в виде POST-запроса на HTTP-адрес /sql.
Примечание
Текущие ограничения:
- При записи данных блокируются все таблицы целиком. 
- Механизмы решения конфликтных ситуаций при работе с данными (как, например, DO NOTHING ON CONFLICT в PostgreSQL) не поддерживаются. 
Вставка данных¶
TCS поддерживает несколько вариантов вставки данных в таблицу:
- SQL-запрос с помощью SQL-драйверов; 
- SQL-запрос на HTTP-адрес - /sql;
- HTTP-запрос с данными в формате JSON на HTTP-адрес - /insert.
Вставка данных через SQL-драйверы¶
Для вставки данных в таблицу используются SQL-запросы с оператором INSERT
вида INSERT INTO table_name { VALUES ( expression [, ...] ) [, ...] | query }.
В одном запросе можно передавать как один, так и несколько объектов для вставки. TCS обрабатывает объекты в том порядке, в каком они указаны в запросе.
В значениях полей можно указывать как конкретные значения, так и null.
Пример:
INSERT INTO target_table VALUES (1, 'One'), (2, 'Two');
Также в запросах можно использовать аргументы-заполнители (placeholders).
Вставка данных через /sql¶
Вставка данных чере HTTP-адрес /sql производится с помощью SQL-запросов, полностью аналогичных
тем, что используются при вставке данных через SQL-драйверы.
Алгоритм обработки запросов и их быстродействие здесь также аналогичны.
Вставка данных через /insert¶
HTTP-адрес /insert используется для выполнения запросов на вставку как более быстрая
альтернатива SQL-драйверам и HTTP-адресу /sql.
Вставка через HTTP-адрес /insert работает быстрее, поскольку не требует
ресурсоемкого построения планов.
При этом способе вставки производятся лишь 2 дополнительных действия:
- проверка соответствия типов переданных значений и типов колонок; 
- перевод данных в необходимый формат для вставки в Tarantool. 
Через HTTP-адрес /insert данные передаются не с помощью SQL-запросов, а с помощью
HTTP-запросов в сериализованном виде в формате JSON.
Требования к HTTP-запросам:
- Запросы отсылаются на HTTP-адрес вида - /insert/$name, где- /$name– это имя таблицы.
- Тело запроса должно содержать массив описаний вставляемых объектов. 
- Для каждой строки указываются значения вида - "имя_колонки": значение. Их требуется указывать для всех колонок, которые есть в таблице.
- Порядок колонок в запросе может быть любым. Например, - [{ "a": 1, "b": 2 }]эквивалентно- [{ "b": 2, "a": 1 }].
- Значения - nullможно опускать. Например,- [{ "a": 1, "b": null }]эквивалентно- [{ "a": 1 }].
- В заголовке запроса нужно обязательно указывать - content-type: application/json.
Пример: вставка данных в таблицу target_table с помощью утилиты curl.
curl -u 'tcs:tcs' -H 'Content-Type: application/json' -d '[{"a":1, "b":-1}, {"a":2, "b": -2}]' http://localhost:7777/insert/target_table
Вставка данных из выборки (insert into select)¶
Для вставки в таблицу объектов из выборки используйте SQL-запрос вида
INSERT INTO table_1 SELECT attribute FROM table_2.
Пример:
INSERT INTO names SELECT name FROM users
В операциях вставки из выборки можно использовать все имеющиеся в TCS возможности SELECT-запросов, например осуществлять выборку из нескольких таблиц (оператор JOIN) и задавать условия с помощью оператора WHERE. Подробнее см. Справочник по SQL > Инструкция SELECT.
Порядок полей таблиц и типы должны совпадать. Например, возьмем две таблицы:
- таблицу - names, которая содержит 2 поля,- nameи- age(именно в таком порядке они объявлены в модели данных);
- таблицу - users, которая содержит поля- address,- age,- nameи прочие.
Следующий запрос составлен с учетом порядка полей в этих таблицах:
INSERT INTO names SELECT name, age FROM users